ποΈGitΠ―ΡΠ°ποΈ
Node / meshtastic / Meshtastic-Android / files / specs / 20260520-153449-node-list-context-menu / plan.md
specs/20260520-153449-node-list-context-menu/plan.md bd2863243bab6eb213401d949839a2bc74dde7e2 (bd286324) Text, 4.55 KB
Implementation Plan: Node List Context Menu Alignment
Branch: T383838jamesarich/issue-5544-alignment-align-node-list-long-press-co-1d63b1 | Date: 2025-05-20 | Spec: T383838specs/20260520-153449-node-list-context-menu/spec.md
Input: Feature specification from T383838/specs/20260520-153449-node-list-context-menu/spec.md
Summary
Reorder the node list long-press context menu to canonical order (Favorite β Mute notifications β Message β Trace Route β Ignore β Remove), add two new menu items (Message, Trace Route), rename "Mute Always" to "Mute notifications", and suppress the context menu for the local node. All changes are scoped to T383838commonMain source sets in the T383838feature:node module with new string resources in T383838core:resources.
Technical Context
Language/Version: Kotlin 2.3+ targeting JDK 21
Primary Dependencies: Compose Multiplatform (M3 Expressive), Koin 4.2+, Navigation 3
Storage: N/A (no persistence changes)
Testing: T383838./gradlew :feature:node:allTests (KMP common tests)
Target Platform: Android + Compose Desktop (KMP)
Project Type: Mobile app (KMP multiplatform)
Performance Goals: Context menu appearance < 300ms (NFR-001)
Constraints: No platform-specific code; all logic in T383838commonMain
Scale/Scope: 3 files modified, 2 new composable functions, 2 new string resources
Constitution Check
GATE: β
PASSED β all seven principles satisfied.
β’ I. Kotlin Multiplatform Core: β
All changes are in T383838commonMain source sets only:
β’ T383838feature/node/src/commonMain/.../component/NodeContextMenu.kt β reorder + add items
β’ T383838feature/node/src/commonMain/.../list/NodeListScreen.kt β wire new callbacks
β’ T383838feature/node/src/commonMain/.../list/NodeListViewModel.kt β add message/traceroute methods
β’ T383838core/resources/src/commonMain/composeResources/values/strings.xml β add T383838trace_route string
β’ No T383838androidMain/T383838jvmMain changes required.
β’ II. Zero Lint Tolerance: β
Verification commands:
T282828
./gradlew spotlessApply spotlessCheck detekt :feature:node:allTests :core:resources:allTests
β’ III. Compose Multiplatform UI: β
Uses Compose Multiplatform T383838DropdownMenu/T383838DropdownMenuItem with T383838leadingIcon pattern (M3 Expressive). No navigation changes (menu actions invoke callbacks). No floats displayed.
β’ IV. Privacy First: β
No PII/location/crypto exposure. No new logging. T383838core/proto not modified.
β’ V. Design Standards Compliance: β
Menu order matches the cross-platform Menu Alignment Audit canonical order. This feature directly implements the upstream behavior spec (Issue #5544 references the cross-platform design standard).
β’ VI. Documentation Freshness: β
No user-facing documentation pages affected. Context menu is a UI interaction, not a documented feature page.
β’ VII. Verify Before Push: β
Commands:
T282828
./gradlew spotlessApply spotlessCheck detekt assembleDebug :feature:node:allTests
gh pr checks <PR>
Project Structure
Documentation (this feature)
T282828
specs/20260520-153449-node-list-context-menu/
βββ plan.md # This file
βββ research.md # Phase 0 output
βββ data-model.md # Phase 1 output
βββ quickstart.md # Phase 1 output
βββ contracts/ # Phase 1 output (UI contract)
βββ tasks.md # Phase 2 output (/speckit.tasks command)
Source Code (repository root)
T282828
feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/
βββ component/
β βββ NodeContextMenu.kt # Reorder items, add MessageMenuItem + TraceRouteMenuItem
βββ list/
β βββ NodeListScreen.kt # Wire onMessage + onTraceRoute callbacks
β βββ NodeListViewModel.kt # Add traceRoute() + getDirectMessageRoute() methods
βββ detail/
βββ NodeRequestActions.kt # Already has requestTraceroute (reuse)
core/resources/src/commonMain/composeResources/values/
βββ strings.xml # Add "trace_route" string; use existing "message", "mute_notifications"
feature/node/src/commonTest/kotlin/org/meshtastic/feature/node/
βββ component/
βββ NodeContextMenuTest.kt # New: verify menu order + disabled states
Structure Decision: KMP multiplatform feature module structure. All business logic and UI in T383838commonMain source set per Constitution Β§I.
Complexity Tracking
β No violations. All gates pass without exception.
Served by rngit 1.5.0 - Generated in 0.09s